You are what you eat.
And I'm cooking what I eat! :)
目录
Unified Framework - 论文精读学习笔记全文概述摘要问题准备工作背景现有方法A Unified FrameworkTransfer Design ElementsSequential or ParallelAttention or FFNMulti-head or Single head总结方法The Unified Framework变体组合 —— 通过在不同的方法之间转移设计元素而得到实验以前的参数高效微调方法概述Sequential or ParallelWhich Modified Representaion — Attention or FNN?哪个Composition Function比较好通过转移有利的设计元素进行有效的整合补充结论参考博文
提前说明:本系列博文主要是对参考博文的解读与重述(对重点信息进行标记、或者整段摘录加深自己的记忆和理解、融合多个博文的精髓、统合不同的代表性的案例),仅做学习记录笔记使用。与君共享,希望一同进步。
题目翻译:对参数高效迁移学习的统一看法。
在下游任务上微调大型预训练语言模型已经成为NLP中事实上的学习范式。然而,传统的方法对预训练模型的所有参数进行微调,随着模型大小和任务数量的增长,这变得令人望而却步。最近的工作提出了一系列参数有效的迁移学习方法,这些方法只对少量(额外)参数进行微调以获得强大的性能。虽然有效,但人们对成功的关键因素以及各种方法之间的联系知之甚少。在本文中,我们分解了最先进的参数有效迁移学习方法的设计,并提出了一个统一的框架,在它们之间建立联系。具体来说,我们将它们重新定义为对预训练模型中特定隐藏状态的修改,并定义一组不同方法变化的设计维度,例如计算修改的函数和应用修改的位置。通过对机器翻译、文本摘要、语言理解和文本分类基准的全面实证研究,我们利用统一的观点来确定以前方法中的重要设计选择。此外,我们的统一框架能够在不同的方法之间传递设计元素,因此,我们能够实例化新的参数有效的微调方法,这些方法比以前的方法调整的参数更少,同时更有效,实现了与微调所有四个任务的所有参数相当的结果。
参数高效的微调在NLP中是较新的方法,早期的代表工作是2019年发表的adapter。2021年开始有越来越多的人关注这一方向并有不同的方法被提出, 代表工作有prefix tuning, P-tuning, prompt tuning, bitfit, LoRA等。本文中提供了统一的角度对这些工作进行了分类。
文章探讨了参数高效的微调方法,如适配器、前缀微调和LoRA,用于优化大型预训练语言模型。通过统一的框架,作者分析了这些方法的共性和关键设计因素,并提出新的变体,实现了更少参数的高效性能。实验表明,FFN子层的修改在大容量下效果更优,而小容量时,注意力修改更适用。
这篇工作将最近提出的多种Parameter-Efficient的迁移学习方法联系在了一起,提出了一个统一的框架,并探索了这些方法成功的关键因素是什么。
统一什么?把Adapter、prompt-tuning、LoRA都定义为预训练模型中添加可调整的特定的隐层状态,只是设计的参数维度、修改函数的计算和位置不同。定义成一个统一的框架,顺便还排列组合出几个小变体。
从预训练的语言模型(PLMs)中进行迁移学习现在是自然语言处理中的普遍范式,在许多任务上产生了强大的性能。使通用PLM适应下游任务的最常见方法是微调所有模型参数(完全微调)。然而,这导致每个任务都有一份单独的微调模型参数,当为执行大量任务的模型提供服务时,其成本过高。随着PLM规模的不断扩大,这个问题尤为突出,现在PLM的规模从数亿到数千亿甚至数万亿的参数。使通用PLM适应下游任务的最常见方法是微调所有模型参数。然而,这导致每个任务都有一份单独的微调模型参数,当为执行大量任务的模型提供服务时,其成本过高。
为了缓解这个问题,已经提出了一些轻量级的替代方案,只更新少量的额外参数,同时保持大多数预训练参数的冻结,如:Adapters、prefix tuning 与 prompt tuning、LoRA 。其中,adapter tuning在预训练网络的每一层插入称为适配器的小型神经模块,在微调时只训练适配器。
这些方法都在不同的任务集上表现出与完全微调相媲美的性能,通常是通过更新不到1%的原始模型参数。除了节省参数外,参数有效的调整使其有可能快速适应新的任务,而不会出现灾难性的遗忘(Pfeiffer等人,2021),并且在 out-of-distribution 上往往表现出卓越的稳健性。
Figure 1 中这些方法都在不同的任务集上表现出与完全微调相当的性能,通常是通过更新不到1%的原始模型参数。除了节省参数外,参数高效微调使其能够快速适应新的任务,而不会出现灾难性的遗忘,并且在分布外评估中经常表现出卓越的鲁棒性。
作者接下来针对上面这几种参数有效的方法提出了几个问题:
这些方法是如何联系的?
这些方法是否有共同的设计元素,是否具有对其有效性至关重要的设计要素,这些要素是什么?
每种方法的有效成分是否可以转移到其他方法中,以产生更有效的变体?
博文3也有对以下3个方法的介绍,本文未摘录。
首先看一下现有这些方法在Transformer里的结构是如何:
Adapters:在PLM的每一层插入称为适配器的小型神经模块,在微调时只对适配器进行训练。适配器层一般使用
将两个适配器依次放在变压器的一个层内,一个在多头关注之后,一个在FFN子层之后。
prefix tuning 与 prompt tuning :受通prompt方法的启发,在输入层或隐藏层中预置了额外的
这其实也与Graphormer等Graph Transformer模型有异曲同工之妙。
LoRA:将可训练的低秩矩阵注入 transformer 层,以近似权重更新。对于一个预训练好的权重矩阵
其中
其他 还有一些参数有效的微调方法
BitFit 只对预训练模型中的 bias 向量进行微调;
以及diff-pruning,它学习一个稀疏的参数更新向量。
Adapter:把input representation经过矩阵
Prefix tuning:把每一层attention的key和value前面都prepend一些向量,把attention原本的K和V前面分别加上
👁 推导见博文2
LORA:用两个low rank的矩阵的乘积近似估计原本
这里发现,prefix tuning实际上是对原来的hidden states作了一个线性插值。将prefix tuning的公式写成这个形式之后,和Adapters就很像了。
这个时候Prefix tuning和Adapters的公式高度相似。且改写后的Prefix tuning公式中的
如果我们把公式以及计算流图放在一起对比,发现我们可以说prefix tuning是一种形式的adapters。
这就启发了作者去寻找一种统一的框架。
于是作者又对比分析了Adapter, Prefix Tuning和LoRA这三种design的具体结构,从四个维度去对比不同设计。
并联适配器(PA)在所有情况下都能击败串联适配器(SA)
functional form是只加入的结构的函数形式、insertion form是指functional form怎么和原来的部分连接,像adapters就是从h出去的,作者把它形容为串联;
而Prefix Tuning和LoRA都是从x出去的,作者把它们形容为并联。
Prefix tuning没法做串联(sequential),他只能加在attention上面(在key和value之前),没法加在feed forward(ffn)上。
而无论是加在attn还是加在ffn上,Parallel Adapter都比Sequential Adapter在这两个任务上表现更好。
对于modified representation,作者对比了加在attention上和加在feed forward上的效果,并发现总体来说,加在feed forward上效果更好。
结果:如 Figure 5 所示,任何带有FFN修改的方法在所有情况下都优于所有带有attention修改的方法(红色标记一般高于所有蓝色标记,唯一的例外是ffn-PA,参数为2.4%),往往参数更少。同样的方法应用于FFN时,总是比它的attention的对应方有所提高。 这些结果表明,FFN修改可以比attention更有效地利用增加的参数,不管功能形式或组成函数是什么。 我们假设这是因为FFN学习特定任务的文本模式,而attention学习的是成对的相互作用,不需要很大的能力来适应新的任务。
Modified representation是指这些设计是作用于Transformer的具体位置。
prefix tuning是作用在attn上的;
adapter同时作用在attn和ffn上;
LoRA是作用在atten上的。
composition function表示
加ffn主要是增加非线性变换;attention的加权求和本质上只是线性变换。
对于modified representation,作者对比了加在attention上和加在feed forward上的效果,并发现总体来说,加在feed forward上效果更好。
理论上,多头的结构应该比单头好,但是这里的Prefix tuning(多头结构)并没有比PA (单头的Parallel adapter)好。于是作者猜想,是否在参数很少的情况下,多头的优势才体现出来?
当参数量很少的时候,multi-head表现的和参数数量很多时基本一致;
而作用在ffn上的设计受参数量影响较大。
由此可以引出结论:当只想改动少量参数时,用multi-head结构; 当可以调整较大数目参数的时候,可以用ffn结构。
并联比串联好;
通常情况下,feedforward比attention好,而在只调整0.1%参数的情况下,multihead attn比ffn好;
Composition的对比实验这里没有展开,实际上作者也做了,并发现LoRA的设计是比较好的,简单且效果好,Prefix tuning的线性插值是比较复杂的。
受 prefix tuning 和 Adapter 之间联系的启发,作者提出了一个总体框架,旨在统一几种最先进的参数有效的调谐方法。
具体来说,作者把它们看作是学习一个向量
为了描述这个修改过程,作者定义了一组设计维度,不同的方法可以通过改变这些维度的值而被实例化。并在Table 1 中说明了Adapters、prefix tuning 和LoRA在这些维度上的情况。
表中的Functional Form:是指计算
博文3 Functional Form是指计算
的具体函数。我们在公式4、6和10中分别详细说明了适配器、前缀调整和LoRA的函数形式。 所有这些方法的函数形式都类似于projdown→nonlinear→projup架构,而 "nonlinear "在LoRA中退化为特征函数。
Modified Representation: 是指直接修改的隐藏表示形式。
博文3 Modified Representation表示哪个隐藏表征被直接修改。
Insertion Form: 指添加的模块如何插入到网络中。传统上适配器是以Sequential 方式插入某个位置的,其中输入和输出都是
博文3 Insertion Form是指添加的模块如何插入到网络中。如Figure 3 所示,传统上适配器是以顺序的方式插入一个位置,其中输入和输出都是
。prefix tuning和LoRA–尽管最初不是这样描述的–原来等同于平行插入,其中x是输入。
Composition Function: 指修改后的向量
博文3 Composition Function是指修改后的向量
如何与原始的隐藏表达 组成,以形成新的隐藏表达。例如,适配器执行简单的加法合成,prefix tuning使用门控加法合成,而LoRA通过一个恒定的因子来缩放 ,并将其添加到原始隐藏表示中,如公式6所示。
我们注意到,许多没有出现在Table 1 中的其他方法也适合这个框架。例如,prompt tuning以类似于prefix tuning和各种适配器变体的方式修改第一层中的头部注意力,可以以类似于适配器的方式表示。 重要的是,这个统一的框架使我们能够沿着这些设计维度研究参数有效的微调方法,确定关键的设计选择,并有可能在不同的方法之间转移设计元素,就像在下面的部分。
Parrallel Adapter 是通过将 prefix tuning 的parallel插入转移到Adapter的变体。
博文3 Parallel Adapters是通过将prefix tuning的平行插入转移到适配器的变体。 有趣的是,虽然我们因其与prefix tuning的相似性而提出了Parallel Adapteris,但同时进行的工作独立地提出了这个变体并对其进行了经验研究;
Multi-head Parallel Adapter 是使 Adapter 与 prefix tuning 更加相似的进一步措施:应用 Parallel Adapter 来修改头部注意力输出作为 prefix tuning。 这样,变体通过利用多头投影来提高能力。
Scaled Parallel Adapter 是通过将LoRA的组成和插入形式转移到适配器的变体,如Figure 3e 所示。
受prefix tuning和adapters之间联系的启发,我们提出了一个总体框架,旨在统一几种最先进的参数高效微调方法。 具体来说,我们把它们归结为学习一个修改向量
,它被应用于各种隐藏表征。
三种主流方法,都是冻结 PLM 参数,仅仅微调新增参数。
Figure 2 说明,在数据较为充沛、比较有挑战的任务中,现有的方法距离 Full Fine-tuning还有一定差距:
Figure 2 给出了几种Parameter-efficient Transfer Learning methods在Xsum数据集上做英文文本摘要任务
的效果。
图中横轴的百分比是指这些方法所调整的参数量占full fine-tuning所调整的参数量的比例;
纵轴ROUGE-2是该任务的评价指标(越大越好),所以在这个图里左上角的位置是理想化的方法。
从图中发现,Adapter[1],Prefix Tuning[2]和LoRA[3]是performance比较好的方法。
Parallel 和 Sequential 哪个方式更好?
Parallel Adapter在所有情况下都能够击败 Sequential Adapter。
适配器修改放在Transformer哪里比较好?
结合Figure 5 和Table 4 的结果,我们得出结论,当参数预算非常小的时候,修改头的注意力显示出最好的结果,而FFN在较大的容量下可以更好地利用修改。 这表明,将更大的参数预算分配给FFN修改可能是有效的,而不是将注意力和FFN同等对待。
LoRA的设计是比较好的,简单且效果好,Prefix tuning的线性插值是比较复杂的。
简单composition(Adapter)、门控composition( prefix tuning )和缩放composition(LoRA)。
缩放的 composition 函数,同时也很容易适用。
我们首先强调前几节的三个发现:
1 按比例的并行适配器是修改FFN的最佳变体;
2 FFN可以在更大的容量下更好地利用修改;
3 修改头部注意力如前缀调整可以在只有0.1%的参数下实现强大的性能。
在他们的启发下,我们混合了这些发现背后的有利设计:具体来说,我们在注意力子层使用小瓶颈维度(l=30)的前缀调谐,并分配更多的参数预算,使用缩放的并行适配器(r=512)修改FFN表示。由于前缀微调可以被看作是我们统一框架中的一种适配器形式,我们将这种变体命名为Mix-And-Match适配器(MAM适配器)。
在表6中,我们将MAM适配器与各种参数有效的微调方法进行比较。
为了完整起见,我们还在表6中列出了其他组合版本的结果:在注意层和FFN层使用并行适配器,以及将预微调(attn)与LoRA(ffn)相结合–这些组合版本都能比它们各自的原型有所改进。 然而,MAM适配器在这两项任务中都取得了最好的性能,并且只需更新6.7%的预训练参数就能达到我们完全微调的效果。
在表2中,我们也介绍了MAM适配器在MNLI和SST2上的结果,其中MAM适配器只增加了0.5%的预训练参数,就取得了与完全微调相当的结果。
博文2 总结
(1) Scaled parallel adapter 是修改FFN的最佳变体。
(2) FFN可以在更大的容量下更好地利用修改。
(3) 像 prefix tuning 这样修改头部注意力可以在只有0.1%的参数下实现强大的性能。
我们的工作提出了一种对预训练模型,特别是语言模型进行有效微调的方法。预训练的语言模型有各种各样的积极应用,例如我们论文中描述的总结、翻译或语言理解的应用。在环境影响方面,本文提出的方法为现有模型增加了少量的额外参数和组件,因此它们对训练和推理时间产生了名义上的负面影响–例如,在我们的四个基准中,最终的MAM Adapter需要100%-150%的训练时间,因为参数高效微调通常需要更多的epochs来收敛;推理时间与完全微调得到的模型大致相同。 另一方面,由于本文提出的方法可以避免完全微调的需要,这也可以大大降低服务模型的成本(在内存/部署的服务器方面)。
Towards a Unified View of Parameter-Efficient Transfer Learning
点评:★★★★☆,这篇博文主要是对论文的内容进行ppt分享,也给了我们看论文的另一个思路,看作者的presentation的slides,也能让我们脱离枯燥的文稿直接看到最核心的内容。
Towards a Unified View of Parameter-Efficient Transfer Learning
点评:★★★★☆,这篇博文把文章内容更有组织的呈现出来了,把脉络理的更加详细,很不错!!
论文阅读:Towards a Unified View of Parameter-Efficient Transfer Learning对参数高效迁移学习的统一看法
点评:★★★★☆,这篇博文也是对论文的梳理,加上前2篇,应该可以达到对博文的理解目的了。无奈每次无法完整吸收,所以先整合下来,慢慢看吧。
博文免责声明
本条博文信息主要整合自网络,部分内容为自己的理解写出来的,如有断章截句导致不正确或因个人水平有限未能详尽正确描述的地方,敬请各位读者指正;
引用出处可能没有完全追溯到原始来源,如因此冒犯到原创作者,请联系本人更正/删除;
博文的发布主要用于自我学习,其次希望帮助到有共同疑惑的朋友。